package com.ylzx.service.Impl;

import com.ylzx.entity.Emp;
import com.ylzx.entity.EmpExample;
import com.ylzx.mapper.EmpMapper;
import com.ylzx.service.EmpService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;

@Transactional //事务管理，该类下，所有的方法都带事务管理
@Service
public class EmpServiceImpl implements EmpService {

    //需要配置MyBatis，别忘记了
    // 1） 在启动类上，配置一个注解，扫描Mapper接口
    // 2） 在application.yml中，配置xxxMapper.xml
    @Resource
    private EmpMapper empMapper;

    @Transactional(propagation = Propagation.SUPPORTS,readOnly = true) //只读事务
    @Override
    public Emp findById(Integer id) {
        return empMapper.selectByPrimaryKey(id);
    }

    @Transactional(propagation = Propagation.SUPPORTS,readOnly = true) //只读事务
    @Override
    public List<Emp> findAll() {
        return empMapper.selectByExample(null);
    }

    @Override
    public void insert(Emp emp) {
        //加了事务管理：要么一起成功，要么一起失败
        //事务：{
            //步骤一：
            empMapper.insertSelective(emp);
            //步骤二：...
            //步骤三：...
        //}

    }

    @Override
    public void update(Emp emp) {
        empMapper.updateByPrimaryKeySelective(emp);
    }

    @Override
    public void delete(Integer[] ids) {
        EmpExample example=new EmpExample();
        example.createCriteria().andEmpnoIn(Arrays.asList(ids));
        empMapper.deleteByExample(example);
    }

    @Override
    public List<Emp> findPage(Integer pageNum, Integer pageSize) {
        //处理分页的第一个参数
        pageNum = (pageNum-1)*pageSize;
        return empMapper.findPage(pageNum,pageSize);
    }

    @Override
    public Integer findTotal() {
        return empMapper.findTotal();
    }

    @Override
    public List<Emp> select01(String ename) {
        return empMapper.select01(ename);
    }
}
